#ifndef COMMUNICATION_H_
#define COMMUNICATION_H_

#define MAX_LABEL_LEN 20
#define MAX_N_VALUES  5
//#define MAX_DIGITS_INTEGER 6  // 数据帧中,整数部分最多多少位 
#define DF_FRACTIONAL_DIGITS 2  // 数据帧中,小数部分的位数 

#define SYM_START '<'  	// 帧开始字符 
#define SYM_END	  '>'  	// 帧结束字符 
#define SEP_LABEL ':'	// 标签分隔字符 
#define SEP_VALUE  ','	// 数据分隔字符 


enum Status 
{
	OK,
	ERR,                  // general error
	ERR_PARSE,            // error happens when parsing data
	START_DETECTED,       // SYM_START deteted, when to clear the buffer
	SEP_LABEL_NOT_FOUND   // SEP_LABEL no found in data frame
};

typedef int status_t;


//@breif 解析后的一个数据帧
//-包含一个字符串label和 n 个 float型的数据 
struct DataFrame
{
	char label[MAX_LABEL_LEN];
	float values[MAX_N_VALUES];
	int n_values;
};

void DF_init(struct DataFrame *data);
status_t DF_set_label(const char *str, int len, struct DataFrame *data);
status_t DF_push_value(float val, struct DataFrame *data);


void init_communication();
status_t read_data(char ch, struct DataFrame *data);
status_t pack_data(const struct DataFrame *data, char * const outStr);
status_t parse(char *recv, struct DataFrame *data);

#endif  // COMMUNICATION_H_
